package com.yls.except.service;

import org.json.JSONArray;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 订单service
 * Created by Administrator on 2016/8/13.
 */
public interface IndentService {

    /**
     * 新增预下单信息
     *
     * @param uid      用户id
     * @param shopinfo 商品信息
     * @param addressid 收货地址id
     * @return 预下单信息
     */
    Map<String, Object> updatetIndent(String uid, JSONArray shopinfo, String addressid);

    /**
     * 下单
     *
     * @param uid        用户id
     * @param shopinfo   商品信息
     * @param addressid  地址id
     * @param indenttype
     * @param reqip
     * @return 下单状态（大于0成功，否则失败）
     */
    Map<String, Object> insertIndent(String uid, JSONArray shopinfo, String addressid, String indenttype, String reqip);

    /**
     * 订单支付
     *
     * @param uid       用户id
     * @param indentnum 订单编号
     * @param paytype   支付类型
     * @param reqip
     * @param openid
     * @param requrl
     * @return 订单支付状态（大于0成功，否则失败）
     */
    Map<String, Object> updateIndentInfo(String uid, String indentnum, String paytype, String reqip, String openid, String requrl);

    /**
     * 根据用id查询用户订单列表信息
     *
     * @param uid         用户id
     * @param indentstate 订单状态
     * @param page        页码
     * @param indenttype
     * @return 订单列表信息
     */
    List<Object> selectIndentListInfoByUid(String uid, String indentstate, String page, String indenttype);

    /**
     * 根据订单编号查询订单详情
     *
     * @param indentnum 订单编号
     * @return 订单详情
     */
    Map<String, Object> selectIndentInfoById(String indentnum);

    /**
     * 取消订单
     *
     * @param uid       用户id
     * @param indentnum 订单编号
     * @return 取消状态（大于0成功，否则失败）
     */
    int updateCancleIndent(String uid, String indentnum);

    /**
     * 发货通知
     *
     * @param uid       用户id
     * @param indentnum 订单编号
     * @param reqip     请求ip
     * @return 发货通知状态（大于0成功，否则失败）
     */
    int insertSendAdvice(String uid, String indentnum, String reqip);

    /**
     * 确认收货
     * @param uid 用户id
     * @param indentnum 订单编号
     * @param reqip 请求ip
     * @return 确认收货状态（大于0成功，否则失败）
     */
    int updateConfirmIndent(String uid, String indentnum, String reqip);

    /**
     * 获取库存商品信息
     * @param uid 用户id
     * @param page 页码
     * @return 库存商品信息
     */
    List<Object> selectShopIndetByUid(String uid, String page);

    /**
     * 根据仓储id查询仓储信息
     * @param repertoryid 仓储id
     * @param uid
     * @return 仓储信息
     */
    Map<String,Object> selectRepertoryInfoById(String repertoryid, String uid);

    /**
     * 购买vip
     * @param uid 用户id
     * @param paytype 支付类型（0：余额  1：微信）
     * @param reqip 请求ip
     * @param openid
     * @param requrl
     * @return 购买状态
     */
    Map<String,Object> insertBuyVip(String uid, String paytype, String reqip, String openid, String requrl);

    /**
     * 仓储商品生成订单
     * @param uid 用户id
     * @param addressids 收货地址
     * @param shopinfo 商品信息
     * @param reqip 请求ip
     * @return 状态（大于0成功，否则失败）
     */
    Map<String,Object> insertRepertoryIndent(String uid, JSONArray addressids, JSONArray shopinfo, String reqip);

    /**
     * 仓储订单支付
     * @param uid 用户id
     * @param typeid 订单id
     * @param paytype 支付类型
     * @param reqip
     * @param openid
     * @param requrl
     * @return 状态（大于0成功，否则失败）
     */
    Map<String, Object> updateRepertoryPay(String uid, String typeid, String paytype, String reqip, String openid, String requrl);

    /**
     * 删除订单
     * @param uid 用户id
     * @param indentnum 订单号
     * @return 状态（大于0成功，否则失败）
     */
    int deleteIndent(String uid, String indentnum);

    /**
     * 获取仓储订单信息
     * @param uid 用户id
     * @param indentstate 订单状态
     * @param page 页码
     * @return 仓储订单信息
     */
    List<Object> selectRepertoryIndent(String uid, String indentstate, String page);

    /**
     * 支付回调
     * @param indentnum 订单号
     * @param totalfee 支付金额
     * @param type 支付类型
     * @param returnnum 返回订单号
     * @param resp
     */
    void updatePayReturn(String indentnum, String totalfee, int type, String returnnum, HttpServletResponse resp);

    /**
     * 取消发货
     * @param uid 用户id
     * @param indentnum 订单编号
     * @return 取消状态
     */
    int updateRepertoryCancle(String uid, String indentnum);

    /**
     * 根据用户id查询用户信息
     * @param uid 用户id
     * @return 用户信息
     */
    Map<String,Object> selectUserinfoById(String uid);

    /**
     * 仓储发货订单支付
     * @param indentnum 订单号
     * @param uid 用户id
     * @param paytype 支付方式
     * @param reqip
     * @param openid
     * @return
     */
    Map<String,Object> updateRepertorySinglePay(String indentnum, String uid, String paytype, String reqip, String openid);

    /**
     * 余额充值
     * @param uid 用户id
     * @param paytype 充值方式
     * @param bntid 充值id
     * @param openid
     *@param reqip @return
     */
    Map<String,Object> insertRecharge(String uid, String paytype, String bntid, String openid, String reqip);

    /**
     * 根据订单编号查询物流信息
     * @param indentnum 订单编号
     * @return 物流信息
     */
    Map<String,Object> selectLogisticInfo(String indentnum);

    /**
     * 自动确认收货
     * @return
     */
    int updateAutoConfirmIndent();

    /**
     * 自动取消订单
     * @return
     */
    int updateAutoCancleIndent();
}
